package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import dominio.Pedido;
import dominio.PersistentObject;
import dominio.ProductoPedido;

public class ProductoPedidoDAO extends DataAccessObject{

	@Override
	public void delete(PersistentObject obj) throws PersistentException {
		Connection conn = null;
		PreparedStatement pst = null;
		try {
			Pedido p = (Pedido) obj;
			conn = getConnection();
			String sql = "DELETE FROM ProductoPedido WHERE IdPedido = ?";
			pst = conn.prepareStatement(sql);
			pst.setInt(1, p.getId());
			int registro = pst.executeUpdate();
			if(registro > 0){
				commitTransaction();
			}
		}
		catch(SQLException sqex) {
			rollBackTransaction();
			throw new PersistentException(sqex.getMessage());
		}
		finally {
			try {
				conn.close();
				if(pst != null) pst.close();
			}
			catch(SQLException sqex) {}
		}
	}

	@Override
	public void insert(PersistentObject obj) throws PersistentException {
		Connection conn = null;
		PreparedStatement pst = null;
		try {
			Pedido p = (Pedido) obj;
			conn = getConnection();
			String sql = "INSERT INTO ProductoPedido (IdPedido,IdProducto,Cantidad) VALUES(?,?,?)";
			for(int i=0;i<p.getProductosPedido().size();i++){
				pst = conn.prepareStatement(sql);
				pst.setInt(1, p.getId());
				pst.setInt(2, p.getProductosPedido().get(i).getProducto().getId());
				pst.setInt(3, p.getProductosPedido().get(i).getCantidad());
				int registro = pst.executeUpdate();
				if(registro == 1)
					commitTransaction();			
			}		
		}
		catch(SQLException sqex) {
			rollBackTransaction();
			throw new PersistentException(sqex.getMessage());
		}
		finally {
			try {
				conn.close();
				if(pst != null) pst.close();
			}
			catch(SQLException sqex) {}
		}
	}


	@Override
	public List<Object> selectAll() throws PersistentException {
		Connection conn = null;
		Statement pst = null;
		ResultSet rs = null;
		try {
			conn = getConnection();
			conn.setAutoCommit(true);
			String sql = "SELECT * FROM ProductoPedido";
			pst = conn.createStatement();
			
			rs = pst.executeQuery(sql);
			
			List<Object> productosPedidos = new ArrayList<Object>();
			ProductoPedido pp = null;
			while(rs.next()) {
				pp= new ProductoPedido();
				pp.setProducto(ProductoDAO.buscarPorId(rs.getInt("IdCliente")));
				pp.setCantidad(rs.getInt("cantidad"));
				productosPedidos.add(pp);
			}
			
			return productosPedidos;
		}
		catch(SQLException sqex) {
			throw new PersistentException(sqex.getMessage());
		}
		finally {
			try {
				conn.close();
				if(pst != null) pst.close();
				if(rs != null) rs.close();
			}
			catch(SQLException sqex) {}
		}
	}

	@Override
	public void update(PersistentObject obj) throws PersistentException {
		Connection conn = null;
		PreparedStatement pst = null;
		try {
			Pedido p = (Pedido) obj;
			conn = getConnection();
			String sql = "UPDATE ProductoPedido SET IdProducto=? Cantidad=? WHERE IdPedido=?";
			for(int i=0;i<p.getProductosPedido().size();i++){
				pst = conn.prepareStatement(sql);
				pst.setInt(1, p.getProductosPedido().get(i).getProducto().getId());
				pst.setInt(3, p.getId());
				pst.setInt(2, p.getProductosPedido().get(i).getCantidad());
				int registro = pst.executeUpdate();
				if(registro == 0)
					throw new PersistentException("No se pudo actualizar el ProductoPedido");
				commitTransaction();	
			}
		}
		catch(SQLException sqex) {
			rollBackTransaction();
			throw new PersistentException(sqex.getMessage());
		}
		finally {
			try {
				conn.close();
				if(pst != null) pst.close();
			}
			catch(SQLException sqex) {}
		}
	}

	public static List<ProductoPedido> getProductos(int idPedido) throws PersistentException {
		Connection conn = null;
		Statement pst = null;
		ResultSet rs = null;
		try {
			conn = getConnection();
			conn.setAutoCommit(true);
			String sql = "SELECT * FROM ProductoPedido WHERE IdPedido ="+idPedido;
			pst = conn.createStatement();
			rs = pst.executeQuery(sql);
			List<ProductoPedido> pps = new ArrayList<ProductoPedido>();
			ProductoPedido pp = null;
			while(rs.next()) {
				pp= new ProductoPedido();
				pp.setProducto(ProductoDAO.buscarPorId(rs.getInt("IdProducto")));
				pp.setCantidad(rs.getInt("Cantidad"));
				pps.add(pp);
			}
			return pps;
		}
		catch(SQLException sqex) {
			throw new PersistentException(sqex.getMessage());
		}
		finally {
			try {
				conn.close();
				if(pst != null) pst.close();
				if(rs != null) rs.close();
			}
			catch(SQLException sqex) {}
		}
	}


}
